home *** CD-ROM | disk | FTP | other *** search
/ PC Active 2009 September / PC Active NR.228.iso / intface / pca / pcaFormat.js < prev    next >
Encoding:
JavaScript  |  2008-01-31  |  7.2 KB  |  266 lines

  1. // class mag niet met kleine letters worden geschreven,
  2. // anders wordt deze als reserved woord behandeld.
  3.  
  4.  
  5. var htmlTagOpen = "<";                var htmlOpen = '<span cLaSs="html">' + htmlTagOpen + '</SPAN><span cLaSs="html">' ;
  6. var htmlTagClose = ">";                var htmlClose = '</SPAN><span cLaSs="html">' + htmlTagClose + '</SPAN>' ;
  7.  
  8. // this part is language dependent. Different values needed here for PHP, ASP...
  9. var scriptDelimOpen = '<%';
  10. var scriptDelimClose = '%>'
  11. var scriptCommentOpen = "'";
  12. var scriptCommentClose = "\n";
  13.  
  14. reserved = new stringArray(26)
  15. reserved[1] = "end";
  16. reserved[2] = "sub";
  17. reserved[3] = "set";
  18. reserved[4] = "do";
  19. reserved[5] = "loop";
  20. reserved[6] = "until";
  21. reserved[7] = "while";
  22. reserved[8] = "wend";
  23. reserved[9] = "for";
  24. reserved[10] = "each";
  25. reserved[11] = "next";
  26. reserved[12] = "function";
  27. reserved[13] = "in";
  28. reserved[14] = "true";
  29. reserved[15] = "false";
  30. reserved[16] = "if";
  31. reserved[17] = "then";
  32. reserved[18] = "else";
  33. reserved[19] = "class";
  34. reserved[20] = "private";
  35. reserved[21] = "public";
  36. reserved[22] = "new";
  37. reserved[23] = "dim";
  38. reserved[24] = "double";
  39. reserved[25] = "try";
  40. reserved[26] = "catch";
  41.  
  42. // end language dependent part
  43.  
  44. function formatScript(scr) {
  45.     return _formatScript(scr);
  46. }
  47.  
  48. function formatHtml(html) {    
  49.     return _formatHtml(html);
  50. }
  51.  
  52. function formatSyntax(text) {
  53.     return _formatSyntax(text);
  54. }
  55.  
  56.  
  57. function stringArray(howMany) {
  58.     this.length = howMany;
  59.     for (var i = 1; i <= howMany; i++) {
  60.         this[i] = '';
  61.     }
  62. }
  63.  
  64. function replace(s, src, trg) {
  65.     var sp = s.split(src);
  66.     return sp.join(trg);
  67. }
  68. function isRegChar(ch) {
  69.     var res = false;
  70.     if ( (ch >= 'a') && (ch <= 'z') ) res = true;
  71.     if ( (ch >= 'A') && (ch <= 'Z') ) res = true;
  72.     if ( (ch >= '0') && (ch <= '9') ) res = true;
  73.     if ( (ch == '_') ) res = true;
  74.     return res;
  75. }
  76.  
  77. function replaceWord(s, src, trg) {
  78.     var sp = s.split(src);
  79.     var res = sp[0];
  80.     for (var q = 1; q < sp.length; q++) {
  81.         // check if character before and character after are seperation chars, or if src is just part of another word
  82.         if ( (!isRegChar(sp[q].charAt(0) ) )  && (!isRegChar(res.charAt(res.length - 1) ) ) ) {
  83.             res = res + "" + trg + "" + sp[q];
  84.         } else {
  85.             // alert("Kan [" + src + "] niet omzetten in [" + trg + "]");
  86.             res = res + "" + src + "" + sp[q];
  87.         }
  88.     }
  89.     return res;
  90. }
  91.  
  92. function markReservedWords(snippet) {
  93.         for (var i = 1; i <= reserved.length; i++) {
  94.             snippet = replaceWord(snippet, reserved[i], '<span cLaSs="res">' + reserved[i] + '</span>');
  95.         }
  96.         return snippet;
  97. }
  98.  
  99. function markScriptComment(snippet) {
  100.         comment = snippet.split(scriptCommentOpen);
  101.         if (comment.length > 1) {
  102.             for (var i = 1; i < comment.length; i ++) {
  103.                 commentEnd = comment[i].split(scriptCommentClose);
  104.                 comment[i] = commentEnd.join(scriptCommentClose + "</SPAN>");
  105.             }
  106.             snippet = comment.join('<span cLaSs="comment">' + scriptCommentOpen);
  107.         }
  108.         return snippet;
  109. }
  110.  
  111. function _formatScript(scr) {
  112.  
  113.     scr = replace(replace(scr, '<', '<'), '>', '>');
  114.  
  115.     var newScr = "";
  116.     
  117.     var idx1, idx2;
  118.     var preQuote;
  119.     var quoteChar = '"';
  120.     
  121.     while ( (idx1 = scr.indexOf(quoteChar)) > -1) {
  122.         preQuote = scr.substring(0, idx1); 
  123.         preQuote = markReservedWords(preQuote);
  124.         
  125.         preQuote = markScriptComment(preQuote);
  126.         
  127.         preQuote = replace(preQuote, "  ", "  "); 
  128.         newScr += preQuote + '<span cLaSs="string">' + quoteChar;
  129.         scr = scr.substring(idx1 + 1, scr.length);
  130.         idx2 = scr.indexOf(quoteChar);
  131.         if (idx2 == -1) idx2 = scr.length;
  132.         newScr += scr.substring(0, idx2 + 1) + "</SPAN>";
  133.         scr = scr.substring(idx2 + 1, scr.length);
  134.     }
  135.     newScr += replace(markScriptComment(markReservedWords(scr)), "  ", "  ");
  136.  
  137.     scr = newScr;
  138.     scr = replace(scr, scriptDelimOpen, '<span cLaSs="script">' + scriptDelimOpen + '</SPAN>');
  139.     scr = replace(scr, scriptDelimClose, '<span cLaSs="script">' + scriptDelimClose + '</SPAN>');
  140.     
  141.     return replace(scr, "\n", "<br>\n");
  142. }
  143.  
  144. function _formatHtml(html) {
  145.     
  146.     html = replace(replace(html, '<', '<'), '>', '>');
  147.  
  148.     var newHtml = "", nonHtml = "";
  149.     
  150.     var oldHtml = html;
  151.     
  152.     var idx1, idx2;
  153.     
  154.     while ( (idx1 = html.indexOf(htmlTagOpen)) > -1) {
  155.         idx2 = html.indexOf(htmlTagClose);
  156.         
  157.         if (idx1 > 0) nonHtml = html.substring(0, idx1); else nonHtml = "";
  158.  
  159.         idxScript = html.indexOf(scriptDelimOpen);
  160.         if (idxScript > idx1 && idxScript < idx2) {
  161.         }
  162.  
  163.         if (html.substring(idx1 + htmlTagOpen.length, idx1 + 3 + htmlTagOpen.length) == "!--") {
  164.             // we have comment!
  165.             newHtml = newHtml + nonHtml + '<span cLaSs="comment">' + html.substring(idx1, idx2 + htmlTagClose.length) + "</SPAN>";
  166.         } else {
  167.             // regular html tag
  168.             newHtml = newHtml + nonHtml + htmlOpen + html.substring(idx1 + htmlTagOpen.length, idx2) + htmlClose;
  169.         }
  170.         html = html.substring(idx2 + htmlTagClose.length, html.length);
  171.     }
  172.         
  173.     return replace(newHtml + "" + html, "\n", "<br>\n");
  174.  
  175. }
  176.  
  177. function _formatSyntax(text) {
  178.  
  179.     text = replace(replace(text, '<', '<'), '>', '>');
  180.  
  181.     var newText = "";
  182.  
  183.     var idx1, idx2;
  184.     
  185.     while ( (idx1 = text.indexOf(scriptDelimOpen)) > -1) {
  186.         idx2 =text.indexOf(scriptDelimClose);
  187.         if (-1 == idx2) idx2 = text.length;
  188.  
  189.         html = formatHtml(text.substring(0, idx1));
  190.         script = formatScript(text.substring(idx1, idx2 + scriptDelimClose.length));
  191.  
  192.         newText = newText + html + script;
  193.  
  194.         text = text.substring(idx2 + scriptDelimClose.length, text.length);
  195.     }
  196.     text = newText + formatHtml(text);
  197.  
  198.     return text;
  199. }
  200.  
  201. function formatCSSValue(s) {
  202.     res = "";
  203.     for (var j = 0; j < s.length; j++) {
  204.         c = s.charAt(j);
  205.         if (!isNaN(c) && (c != ' ')) {
  206.             res += '<SPAN class="CSSNumber">' + c + "</SPAN>";
  207.         } else {
  208.             res += c;
  209.         }
  210.     }
  211.     return res;
  212. }
  213. function formatCSS(s) {
  214.     html = "";
  215.     while (s.indexOf("{") > -1) {
  216.         sname = s.substring(0, s.indexOf("{"));
  217.         html += '<SPAN class="CSSStyleName">' + sname + "</SPAN> {<BR>";
  218.         scontent = s.substring(s.indexOf("{") + 1, s.indexOf("}"));
  219.         selems = scontent.split(";");
  220.         for (var i = 0; i < selems.length; i++) {
  221.             snameval = selems[i].split(":");
  222.             if (snameval.length >= 2) {
  223.                 html += "       "
  224.                     + '<SPAN class="CSSName">' + snameval[0] + '</SPAN>'
  225.                     + ':<SPAN class="CSSValue">'
  226.                     + formatCSSValue(snameval[1])
  227.                     + '</SPAN>'
  228.                     + ";<BR>";
  229.             }
  230.         }
  231.         html += "}<BR>";
  232.         s = s.substring(s.indexOf("}") + 1, s.length);
  233.     }
  234.     return html;
  235. }
  236.  
  237.  
  238. function formatInlineCSS(s) {
  239.     html = "";
  240. //    while (s.indexOf('style') > -1) {
  241. //        sname = s.substring(0, s.indexOf('style'));
  242. //        html += '<SPAN class="CSSStyleName">' + sname + "</SPAN>";
  243.         if (s.indexOf('style') == -1)
  244.             scontent = s;
  245.         else
  246.             scontent = s.substring(s.indexOf('style') + 6, s.lastIndexOf('"'));
  247.         selems = scontent.split(";");
  248.         for (var i = 0; i < selems.length; i++) {
  249.             snameval = selems[i].split(":");
  250.             if (snameval.length >= 2) {
  251.                 html += '<SPAN class="CSSName">' + snameval[0] + '</SPAN>'
  252.                     + ':<SPAN class="CSSValue">'
  253.                     + formatCSSValue(snameval[1])
  254.                     + '</SPAN>'
  255.                     + ";";
  256.             }
  257.         }
  258. //        s = s.substring(s.indexOf('"') + 1, s.length);
  259. //    }
  260.  
  261.     if (s.indexOf('style') != -1)
  262.         html += '<SPAN class="CSSName">"</SPAN>';
  263.     return replace(html, "\n", "<br>\n");
  264. }
  265.  
  266.